package br.com.dallasmotopecas.conhecimento.relatorio.vendedor.managerbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.comum.agenda.vo.AgendaClienteAtendimentoVo;
import br.com.dallasmotopecas.comum.cliente.vo.ClienteDadosVo;
import br.com.dallasmotopecas.conhecimento.relatorio.vendedor.controller.RelVendedorController;
import br.com.dallasmotopecas.util.converter.ConverterNumeros;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.ListarObjetoException;
import br.com.dallasmotopecas.util.exception.NumeroFormatoInvalidoException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="relVendedorManagerBean")
@ViewScoped
public class RelVendedorManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private ClienteDadosVo clienteDadosVo;
	private List<ClienteDadosVo> listaClienteDados;
	private List<AgendaClienteAtendimentoVo> listaTipoAtendimentoGeral;
	private List<AgendaClienteAtendimentoVo> listaAtendinentosClientes;
	private double valorTotalVendas;
	
	@PostConstruct
	public void init()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}

	@PreDestroy
	public void destroy()
	{
		setClienteDadosVo(null);
		
		if (getListaClienteDados() != null)
		{
			getListaClienteDados().clear();
			setListaClienteDados(null);
		}
	}
	
	public ClienteDadosVo getClienteDadosVo()
	{
		if (clienteDadosVo == null) clienteDadosVo = new ClienteDadosVo();
		
		return clienteDadosVo;
	}

	public void setClienteDadosVo(ClienteDadosVo clienteDadosVo)
	{
		this.clienteDadosVo = clienteDadosVo;
	}

	public List<ClienteDadosVo> getListaClienteDados()
	{
		if (listaClienteDados == null) listaClienteDados = new ArrayList<ClienteDadosVo>();
		
		return listaClienteDados;
	}

	public void setListaClienteDados(List<ClienteDadosVo> listaClienteDados)
	{
		this.listaClienteDados = listaClienteDados;
	}

	public double getValorTotalVendas()
	{
		return valorTotalVendas;
	}

	public void setValorTotalVendas(double valorTotalVendas)
	{
		this.valorTotalVendas = valorTotalVendas;
	}

	public List<AgendaClienteAtendimentoVo> getListaTipoAtendimentoGeral()
	{
		if (listaTipoAtendimentoGeral == null) listaTipoAtendimentoGeral = new ArrayList<AgendaClienteAtendimentoVo>();
		
		return listaTipoAtendimentoGeral;
	}

	public void setListaTipoAtendimentoGeral(
			List<AgendaClienteAtendimentoVo> listaTipoAtendimentoGeral)
	{
		this.listaTipoAtendimentoGeral = listaTipoAtendimentoGeral;
	}

	public List<AgendaClienteAtendimentoVo> getListaAtendinentosClientes()
	{
		if (listaAtendinentosClientes == null) listaAtendinentosClientes = new ArrayList<AgendaClienteAtendimentoVo>();
		
		return listaAtendinentosClientes;
	}

	public void setListaAtendinentosClientes(List<AgendaClienteAtendimentoVo> listaAtendinentosClientes)
	{
		this.listaAtendinentosClientes = listaAtendinentosClientes;
	}

	public void carregarTelaFiltro()
	{
		setClienteDadosVo(new ClienteDadosVo());
		abrirModal("diagFiltro");
	}

	public void carregarDadosVenda()
	{
		RelVendedorController relVendedorController = null;
		double valor = 0;
		try
		{
			relVendedorController = new RelVendedorController(getContexto());
			relVendedorController.carregarDadosRelatorio(getListaClienteDados(), getClienteDadosVo(), getListaTipoAtendimentoGeral());
			
			for (int i = 0; i < getListaClienteDados().size(); i++)
				valor += getListaClienteDados().get(i).getValorCompraTotal();
			
			setValorTotalVendas(ConverterNumeros.converteDoubleParaBigDecimal(2, valor).doubleValue());
			fecharModalSemMensagem("diagFiltro");
		}
		catch(ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (NumeroFormatoInvalidoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (relVendedorController != null)
			{
				relVendedorController.close();
				relVendedorController = null;
			}
		}
	}
	
	public void carregarDadosAtendimentos(ClienteDadosVo clienteDadosVo)
	{
		RelVendedorController relVendedorController = null;
		try
		{
			setListaAtendinentosClientes(new ArrayList<AgendaClienteAtendimentoVo>());
			relVendedorController = new RelVendedorController(getContexto());
			relVendedorController.carregarListaAtendimentosClienteGeral(getListaAtendinentosClientes(), clienteDadosVo);
			abrirModal("diagDetalheAt");
		}
		catch(ListarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (relVendedorController != null)
			{
				relVendedorController.close();
				relVendedorController = null;
			}
		}
	}
	
	public void sair()
	{
		try
		{
			redirecionarPagina("/view/conhecimento/Home.jsf");
		}
		catch (DirecionamentoPaginaException e)
		{
			e.printStackTrace();
		}
	}
	
	public void fecharModalDetalhe()
	{
		try
		{
			setListaAtendinentosClientes(new ArrayList<AgendaClienteAtendimentoVo>());
			fecharModalSemMensagem("diagDetalheAt");
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}
}
